import javax.xml.bind.annotation.XmlType;
import java.lang.Integer;
import java.util.StringTokenizer;
import java.util.Stack;

public class MyDC
{
    /** constant for addition symbol */
    private final String ADD="+";
    /** constant for subtraction symbol */
    private final String SUBTRACT="-";
    /** constant for multiplication symbol */
    private final String MULTIPLY="*";
    /** constant for division symbol */
    private final String DIVIDE="/";
    /** the stack */
    private Stack<Integer>stack;

    public MyDC(){
        stack=new Stack<Integer>();
    }

    public int evaluate(String expr)
    {
        int op1,op2,result=0;
        String token;
        StringTokenizer tokenizer=new StringTokenizer(expr);

        while(tokenizer.hasMoreTokens()) {
            token = tokenizer.nextToken();

            //如果是运算符，调用isOperator
            if (isOperator(token)) {

                //从栈中弹出操作数2
                op2 = stack.pop();
                //从栈中弹出操作数1
                op1 = stack.pop();
                //根据运算符和两个操作数调用evalSingleOp计算result;
                result = evalSingleOp(token, op1, op2);
                //计算result入栈;
                stack.push(result);
            } else//如果是操作数
            {
                stack.push(Integer.parseInt(token));
                //操作数入栈;
            }
        }
        return result;
    }

    private boolean isOperator(String token)
    {
        return(token.equals("+")||token.equals("-")||
                token.equals("*")||token.equals("/"));
    }

    private int evalSingleOp(String operation,int op1,int op2)
    {
        int result=0;

        switch(operation)
        {
            case ADD:
                result=op1+op2;
                break;
            case SUBTRACT:
                result=op1-op2;
                break;
            case MULTIPLY:
                result=op1*op2;
                break;
            case DIVIDE:
                result=op1/op2;
            default:
                break;
        }

        return result;
    }
}